package se.cth.hedgehogphoto.database; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import se.cth.hedgehogphoto.objects.FileObject; import se.cth.hedgehogphoto.objects.LocationGPSObject; /** * * @author Julia * */ public class DatabaseHandler implements DatabaseAccess, Runnable{ private static Files files = Files.getInstance(); private static List<PictureObject> pictureList = files.getPictureList(); private static List<AlbumObject> albumList = files.getAlbumList(); private JpaAlbumDao albumDao; private JpaCommentDao commentDao; private JpaLocationDao locationDao; private JpaTagDao tagDao; private JpaPictureDao pictureDao = new JpaPictureDao();; private EntityManager em; private static DatabaseHandler db = null; public DatabaseHandler () {} public static DatabaseHandler getInstance(){ if(db == null){ db = new DatabaseHandler(); } return db; } @Override public void run(){ this.albumDao = new JpaAlbumDao(); this.commentDao = new JpaCommentDao(); this.locationDao = new JpaLocationDao(); this.tagDao = new JpaTagDao(); this.pictureDao = new JpaPictureDao(); this.em = Entity.entityManager; } public List<String> getTags(){ List<Tag> tags = this.tagDao.getAll(); List<String> taggs = new ArrayList<String>(); for(TagObject t : tags){ taggs.add(t.getTag()); } return taggs; } public List<String> getLocations(){ List<Location> location = this.locationDao.getAll(); List<String> locations = new ArrayList<String>(); for(LocationObject l:location){ locations.add(l.getLocation()); } return locations; } public void updateSearchPictureNames(String search){ pictureList.clear(); pictureList.addAll(searchPictureNames(search)); files.setPictureList(pictureList); } public List<? extends PictureI> searchPictureNames(String search){ return this.pictureDao.searchfromNames(search); } public void updateSearchPicturesfromDates(String search){ pictureList.clear(); pictureList.addAll(searchPicturesfromDates(search)); files.setPictureList(pictureList); } public List<? extends PictureObject> searchPicturesfromDates(String search){ return this.pictureDao.findByString("date", search); } public void updateSearchAlbumsfromDates(String search){ albumList.clear(); albumList.addAll(searchAlbumsfromDates(search)); files.setAlbumList(albumList); } public List<? extends AlbumI> searchAlbumsfromDates(String search){ return this.albumDao.searchfromDates(search); } public void updateSearchAlbumNames(String search){ albumList.clear(); albumList.addAll(searchAlbumNames(search)); files.setAlbumList(albumList); } public List<? extends AlbumI> searchAlbumNames(String search){ return this.albumDao.searchfromNames(search); } public void updateSearchPicturesfromComments(String search){ pictureList.clear(); pictureList.addAll(searchPicturesfromComments(search)); files.setPictureList(pictureList); } public List<? extends PictureI> searchPicturesfromComments(String search){ return this.pictureDao.searchfromComments(search); } public void updateSearchAlbumsfromComments(String search){ albumList.clear(); albumList.addAll(searchAlbumsfromComments(search)); files.setAlbumList(albumList); } public List<? extends AlbumI> searchAlbumsfromComments(String search){ return this.albumDao.searchfromComments(search); } public void updateSearchPicturesfromTags(String search){ pictureList.clear(); pictureList.addAll(searchPicturesfromTags(search)); files.setPictureList(pictureList); } @Override public List<? extends PictureI> searchPicturesfromTags(String search){ return this.pictureDao.searchfromTags(search); } public void updateSearchPicturefromsLocations(String search){ pictureList.clear(); pictureList.addAll(searchPicturefromsLocations(search)); files.setPictureList(pictureList); } public List<? extends PictureI> searchPicturefromsLocations(String search){ return this.pictureDao.searchfromLocations(search); } public void updateAlbumsfromSearchTags(String search){ albumList.clear(); albumList.addAll(searchAlbumfromTag(search)); files.setAlbumList(albumList); } public List<? extends AlbumI> searchAlbumfromTag(String search){ return this.albumDao.searchfromTags(search); } public void updateSearchAlbumsfromLocations(String search){ albumList.clear(); albumList.addAll(searchAlbumsfromLocations(search)); files.setAlbumList(albumList); } public List<? extends AlbumI> searchAlbumsfromLocations(String search){ return this.albumDao.searchfromTags(search); } public void updateAllPictures(){ pictureList.clear(); pictureList.addAll(getAllPictures()); files.setPictureList(pictureList); } public List<? extends PictureI> getAllPictures(){ return this.pictureDao.getAll(); } public void updateAllAlbums(){ albumList.clear(); albumList.addAll(getAllAlbums()); files.setAlbumList(albumList); } public List<? extends AlbumI> getAllAlbums(){ Query p = em.createQuery("select t from Album t"); return (List<Album>)p.getResultList(); } public void insertPicture(FileObject f){ this.pictureDao.insertPicture(f); } public void updateAddTagtoPicture(String tag, String filePath){ for(PictureObject f:pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); } addTagtoPicture(tag, filePath); files.setPictureList(pictureList); } public void addTagtoPicture(String tag, String filePath){ this.pictureDao.addTag(tag, filePath); } public void updateAddTagtoAlbum(String tag, String albumName){ for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } addTagtoAlbum(tag, albumName); files.setAlbumList(albumList); } public void addTagtoAlbum(String tag, String albumName){ this.albumDao.addTag(tag, albumName); } public void updateaddCommenttoPicture(String comment, String filePath){ for(PictureObject f:pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); } addCommenttoPicture(comment, filePath); files.setPictureList(pictureList); } public void addCommenttoPicture(String comment, String filePath){ this.pictureDao.addComment(comment, filePath); } public void updateAddCommenttoAlbum(String comment, String albumName){ for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } addCommenttoAlbum(comment, albumName); files.setAlbumList(albumList); } public void addCommenttoAlbum(String comment, String filePath){ this.albumDao.addComment(comment, filePath); } public void updateAddLocationtoPicture(String location, String filePath){ for(PictureObject f:pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); } addLocationtoPicture(location, filePath); files.setPictureList(pictureList); } public void addLocationtoPicture(String location, String filePath){ this.pictureDao.addLocation(location, filePath); } public void updateAddLocationtoAlbum(String location, String albumName){ for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } addLocationtoAlbum(location, albumName); files.setAlbumList(albumList); } public void addLocationtoAlbum(String location, String albumName){ this.albumDao.addLocation(location, albumName); } public void deleteAll(){ List<Picture> allPictures = this.pictureDao.getAll(); for(PictureObject pic:allPictures){ deletePicture(pic.getPath()); } } public void updateDeletePictures(String filePath){ deletePicture(filePath); pictureList.clear(); pictureList.addAll(getAllPictures()); files.setPictureList(pictureList); } public void deletePicture (String filePath){ this.pictureDao.deletePicture(filePath); } public void updateDeleteTagsfromPictures(String filePath){ deleteTagsfromPicture(filePath); for(PictureObject p: pictureList){ if(p.getPath().equals(filePath)) pictureList.remove(p); } files.setPictureList(pictureList); } public void deleteTagsfromPicture(String filePath){ this.pictureDao.deleteTags(filePath); } public void updateDeletePicturefromAlbum(String filePath){ this.albumDao.deletePicture(filePath); String albumName = ""; for(PictureObject f: pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); albumName = f.getAlbum().getAlbumName(); } files.setPictureList(pictureList); if(albumName.equals("")){ for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } files.setAlbumList(albumList); } } public void deletePicturefromAlbum(String filePath){ this.pictureDao.deletePicture(filePath); } public void updateDeleteCommentfromPicture(String filePath){ deleteCommentfromPicture(filePath); for(PictureObject f: pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); } files.setPictureList(pictureList); } public void deleteCommentfromPicture(String filePath){ this.pictureDao.deleteComment(filePath); } public void updateDeleteLocationfromPicture(String filePath){ deleteLocationfromPicture(filePath); for(PictureObject f: pictureList){ if(f.getPath().equals(filePath)) pictureList.remove(f); } files.setPictureList(pictureList); } public void deleteLocationfromPicture(String filePath){ this.pictureDao.deleteLocation(filePath); } public void updateDeleteCommentfromAlbum(String albumName){ deleteCommentfromAlbum(albumName); for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } files.setAlbumList(albumList); } public void deleteCommentfromAlbum(String albumName){ this.albumDao.deleteComment(albumName); } public void updateDeleteLocationfromAlbum(String albumName){ deleteLocationfromAlbum(albumName); for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } files.setAlbumList(albumList); } public void deleteLocationfromAlbum(String albumName){ this.albumDao.deleteLocation(albumName); } public void updateDeleteTagsfromAlbum(String albumName){ deleteTagsfromAlbum(albumName); for(AlbumObject f:albumList){ if(f.getAlbumName().equals(albumName)) albumList.remove(f); } files.setAlbumList(albumList); } public void deleteTagsfromAlbum(String albumName){ this.albumDao.deleteTags(albumName); } @Override public List<? extends PictureObject> findByDate(String search){ return pictureDao.findbyDate("date", search); } public Picture findPictureById(String path){ return pictureDao.findById(path); } public void setPictureName(String name,String path){ pictureDao.setName(name, path); } public void setLocationtoPicture(LocationGPSObject location,Picture picture){ pictureDao.setLocation(location, picture); } }